<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>How to prepare a Ghostscript release</title>
<!-- $Id: Release.htm,v 1.95 2005/10/20 19:46:23 ray Exp $ -->
<!-- Originally: make.txt -->
<link rel="stylesheet" type="text/css" href="gs.css" title="Ghostscript Style">
</head>

<body>
<!-- [1.0 begin visible header] ============================================ -->

<!-- [1.1 begin headline] ================================================== -->

<h1>How to prepare a Ghostscript release</h1>

<!-- [1.1 end headline] ==================================================== -->

<!-- [1.2 begin table of contents] ========================================= -->

<h2>Table of contents</h2>

<blockquote><ul>
<li><a href="#Introduction">Introduction</a>
<li><a href="#Servers">Servers</a>
<ul>
<li><a href="#Development_files">Development sources and bug reports</a>
<li><a href="#Distribution">Distribution</a>
</ul>
<li><a href="#Release_numbering">Release numbering</a>
<li><a href="#Making_distributions">Making distributions</a>
<ul>
<li><a href="#Preparing_source">Preparing the source code</a>
<li><a href="#Testing">Testing</a>
<li><a href="#Changelog">Updating the Changelog</a>
<li><a href="#Making_Tarballs">Making the source distribution</a>
<li><a href="#Testing_on_Windows">Testing on Windows</a>
<li><a href="#Windows_distribution">Building the Windows distribution</a>
<li><a href="#Finishing_up">Finishing up</a>
<li><a href="#Beta_distributions">Beta distributions</a>
<li><a href="#Public_releases">Public releases</a>
</ul>
<li><a href="#After_releasing">After releasing</a>
<li><a href="#GPL_releases">GPL Ghostscript releases</a>
<ul>
<li><a href="#GPL_code">GPL code</a>
<li><a href="#GPL_after_releasing">After releasing (GPL)</a>
</ul>
<li><a href="#Fonts">Fonts</a>
</ul></blockquote>

<!-- [1.2 end table of contents] =========================================== -->

<!-- [1.3 begin hint] ====================================================== -->

<p>For other information, see the <a href="Readme.htm">Ghostscript
overview</a> and the instructions on how to <a href="Make.htm">build
Ghostscript</a>.

<!-- [1.3 end hint] ======================================================== -->

<hr>

<!-- [1.0 end visible header] ============================================== -->

<!-- [2.0 begin contents] ================================================== -->

<h2><a name="Introduction"></a>Introduction</h2>

<p>
This document describes the process that artofcode LLC, the copyright holder
of Ghostscript, uses for making new Ghostscript releases. Please note
that while the the license allows anyone to prepare and distribute
releases in accordance with its terms and conditions, this document is
really meant only to document the process used by artofcode LLC.
However, the eventual purpose of this document is to describe
Ghostscript release procedures in enough detail that someone who knows
little about Ghostscript but is generally familiar with the platform on
which the procedure is being carried out can execute the procedures
correctly. So if you add or changing anything to/in this document,
be sure to specify all command lines, file names, etc. in explicit
detail.

<p>
The release process for the GPL and AFPL branches are similar, though
there are some differences in terms of policy and release locations. See
the section on <a href="#GPL_releases">GPL releases</a> below for
information specific to GPL Ghostscript.

<p>
File names below that don't include an explicit subdirectory name are in the
<b><tt>src</tt></b> subdirectory.

<p>
If you do plan to make your own distribution, please be aware of some items
you will want to change.

<ul>

<li>If you make any significant changes, please edit
<b><tt>gscdef.c</tt></b> to change <b><tt>GS_PRODUCTFAMILY</tt></b> and
<b><tt>GS_PRODUCT</tt></b> from "AFPL Ghostscript" to something else,
in order to avoid confusion with artofcode's releases.

<li>In the same file, you may also want to edit <b><tt>GS_COPYRIGHT</tt></b>
to add your own copyright notice (although you must not remove any
notice that is there).

<li>You will almost certainly want to edit <b><tt>version.mak</tt></b> to
change the revision date, <b><tt>GS_REVISIONDATE</tt></b>.

<li>If you want to change the release number, you must change it in all the
places listed under <a href="#Release_numbering">"Release numbering"</a>
below.

</ul>

<h2><a name="Servers"></a>Servers</h2>

<p>
The GPL and AFPL Ghostscript files are maintained on sites accessible to
the public.  One specific site hosts the active CVS repository for code,
data, and documentation, and the bug report data base; several sites
offer distributions with release numbers, intended for wider
distribution.

<h3><a name="Development_files"></a>Development sources and bug reports</h3>

<p>
The primary repository for GPL and AFPL Ghostscript is <a
href="http://www.ghostscript.com/" class="offsite">ghostscript.com</a>.
Please check there first for any news about releases or current work,
and for information about where to download ghostscript and how to
access the mailing lists.

CVS access is through <a
href="http://cvs.ghostscript.com/"
class="offsite">cvs.ghostscript.com</a>.

<p>
It may also be helpful to
read the SourceForge AFPL Ghostscript home page (<a
href="http://sourceforge.net/projects/ghostscript/" 
class="offsite">http://sourceforge.net/projects/ghostscript/</a>).

<h3><a name="Distribution"></a>Distribution</h3>

<p>
Stable, beta, and development releases are all available from
<blockquote>
<a
href="http://sourceforge.net/project/showfiles.php?group_id=1897" 
class="offsite">http://sourceforge.net/project/showfiles.php?group_id=1897</a>
</blockquote>

<p>
Stable releases are also distributed from

<blockquote>
<a
href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/</a> or
<br>
<a
href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/</a>
</blockquote>

<p>
Development releases are also distributed from

<blockquote>
<a href="ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test/" 
class="offsite">ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test/</a>
</blockquote>

<h2><a name="Release_numbering"></a>Release numbering</h2>

<p>
Ghostscript uses a two-part (major.minor) release number. The second part
of the release number is a 2-digit decimal fraction: it counts 00,
01, 02, and so on through 99.

<ul>

<li>Release numbers N.0x and N.5x indicate stable versions.
<li>Successive increments generally indicate bug fixes and minor enhancements. 
<li>Development, testing and beta releases generally begin with a minor release number that is
a multiple of ten and increment from there.
</ul>

<p>
Release numbers appear in the following places in the Ghostscript files:

<ul>

<li>In <b><tt>lib/gs_init.ps</tt></b>, as an integer (release number x100) at the beginning of the
file just after the initial comment blocks.

<li>In <b><tt>src/version.mak</tt></b>, split into 3 lines.

<li>In <b><tt>doc/News.htm</tt></b>, in the two headers and their labels and at the very end in
the copyright footer.

<li>At the foot of most documenation files. However, these are updated mechanically from the value
in <b><tt>News.htm</tt></b> as part of the release process and do not need to be maintained
directly.
</ul>

<h3>Before a release</h3>

<p>
The current release number in the development code must be set to the desired value. The increment
from just after the previous release (see below) is sufficient for minor updates. In the case of
major changes or a new stable release, the number will need to be bumped; this is generally done
as the first step of preparing a new release.

<h3>After a release</h3>

<p>
After making a release the release number in CVS is incremented. Thus versions built
from cvs are always marked with a future (or unused) release number to avoid confusion.

<p>
Additionally, After an N.00 or N.50 stable release, a branch is made in cvs so that development 
can continue independently of changes to the stable series. When this happens, the minor release
number is incremented by 10 (or 20) on the development branch (and by 1 on the new stable branch,
as above) to avoid collisions.

<p>
While incrementing the release number after making a release may seem
counter-intuitive, it ensures that, at any given time, the version
number alone is sufficient to distinguish between the current CVS
state and a numbered release.

<h2><a name="Making_distributions"></a>Making distributions</h2>

<p>
This document only discusses source distributions.  Source distributions
currently can only be made on Linux systems (but it probably wouldn't take
much work to support other Unix systems).  Ghostscript as distributed also
often includes executables or other packages for the Windows and MacOS
environments, but artofcode does not always produce these, and this document does not
discuss them.  For more information about Windows packages, please contact
<a href="mailto:bug-gswin@ghostscript.com"><tt>bug-gswin@ghostscript.com</tt></a>;
for more information about MacOS packages, please contact <a
href="mailto:mac-gs@ghostscript.com"><tt>mac-gs@ghostscript.com</tt></a>.

<p>
To make a source distribution, you will need the scripts and data files in
the <b><tt>toolbin/</tt></b> directory. The instructions below generally
assume that you're invoking the relative to the top level of the source 
tree.

To run the scripts, you will need reasonably current versions of Tcl,
freely available from Scriptics 
(<a class="offsite" href="http://www.scriptics.com"><tt>http://www.scriptics.com</tt></a>), and
Python, freely available from <a class="offsite"
href="http://www.python.org"><tt>http://www.python.org</tt></a>.

<p>
To update the changelogs, you'll also need a recent version of the cvs2cl perl script. If
not already installed on your system a copy can be found at
<a class="offsite" href="http://www.red-bean.com/cvs2cl/cvs2cl.pl">http://www.red-bean.com/cvs2cl/cvs2cl.pl</a>.

<p>
The instructions below also refer to some files that are deliberately
omitted from the public distribution, because they are not freely
redistributable. You will need to provide similar files for your
environment.

<blockquote><pre>
<b><tt>data/*/*.ps</tt></b> (PostScript files) - needed for smoke testing
</pre></blockquote>

<h3><a name="Preparing_source"></a>Preparing the source code</h3>

<p>
If necessary, update the release number by incrementing it as described in
<a href="#Release_numbering">Release numbering</a> above.

<p>
Update references to the date for release:

<ul>

<li>In <b><tt>version.mak</tt></b>, the numeric date.

<li>In <b><tt>doc/News.htm</tt></b>, in two places, skipping the Id:
line. That is, in parentheses after the <tt>VERSION X.YY</tt> heading,
and in the copyright footer both the year and the release date.

<li>In <b><tt>src/dwsetup.rc</tt></b> and <b><tt>src/winint.mak</tt></b>,
update the year in the embedded copyright notice.

</ul>

<p>
We recommend using a UTC release date to avoid timezone skew.

<p>
Also in <b><tt>doc/News.htm</tt></b>, update the number of the highest
closed bug and the list of open bugs.

<p>
Check in <b><tt>gscdef.c</tt></b> that the definition of
<b><tt>GS_PRODUCT</tt></b> includes the appropriate one of "DEVELOPMENT
RELEASE", "BETA RELEASE", or neither, and does not include "CVS
PRE-RELEASE".

<p>Run the source-consistency checks from the test suite:

<blockquote><pre>
toolbin/tests/check_all.py --gsroot=.
</pre></blockquote>
Where the argument of --gsroot is the path to the top level of the
source tree. Fix any problems it indicates, and commit them to cvs.

<p>
Check for patched configuration parameters, <b><tt>#define TEST</tt></b>s,
version/date inconsistencies, and mismatches between the working directory
and the CVS repository by running:

<blockquote><pre>
toolbin/pre.tcl
</pre></blockquote>

<p>
This program compares the result of various greps against a check file,
writing the results of grep on one output file and the differences from the
check file on another.  See the source code for the default file names.  The
important one is the check file,
<b><tt>toolbin/pre.chk</tt></b>.  <b><tt>pre.tcl</tt></b> also verifies
that the
right information is in the following places:
<ul>
<li>release number in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,
<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>,
<b><tt>lib/gs_init.ps</tt></b>
<li>revision date in <b><tt>man/*.1</tt></b>, <b><tt>doc/*.htm</tt></b>,
<b><tt>version.mak</tt></b>, <b><tt>doc/gs-vms.hlp</tt></b>
<li>copyright year (if necessary) in <b><tt>gscdef.c</tt></b>
<li>third-party library version number in <b><tt>*.mak</tt></b>
</ul>

<p>
If necessary, run

<blockquote><pre>
toolbin/pre.tcl update
</pre></blockquote>

<p>
to update the version and revision date in the doc files, and then run

<blockquote><pre>
toolbin/pre.tcl
</pre></blockquote>

<p>
again. To confirm that everything is updated. You may have to commit to
cvs after the update to satify the script that all the dates are
correct.

<p>
Check the consistency of the source code with the makefiles by
running:

<blockquote><pre>
toolbin/gsmake.tcl check
</pre></blockquote>

This script assumes the top level makefile is named '<tt>makefile</tt>'.

<p>
Fix any problems and commit to cvs.

<h3><a name="Testing"></a>Testing</h3>

<p>
Edit your top-level the Makefile to set
<blockquote><pre>
FEATURE_DEVS=$(FEATURE_DEVS_ALL)
COMPILE_INITS=1
</pre></blockquote>

<p>
This will help catch compilation problems.

<p>
Run

<blockquote><pre>
rm obj/*
make -j2 &gt;&amp; make.log
</pre></blockquote>

<p>
and look for warnings and errors in the log file.

<p>
Do a smoke test, updating the example paths as necessary:

<blockquote><pre>
unset GS_DEVICE GS_FONTPATH GS_LIB GS_OPTIONS
./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH toolbin/smoke.ps
./bin/gs -I./lib -I./fonts -dNOPAUSE -dBATCH -sDEVICE=bitcmyk\
  -sOutputFile=/dev/null -r600 -dBufferSpace=100000 toolbin/smoke.ps
</pre></blockquote>

<p>
This reads files named

<blockquote><pre>
<b><tt>data/misc/*.ps</tt></b>
<b><tt>data/ps/*.ps</tt></b>
<b><tt>data/psl2/*.ps</tt></b>
<b><tt>data/psl3/*.ps</tt></b>
</pre></blockquote>

<p>
(Edit <b><tt>toolbin/smoke.ps</tt></b> to use other test sets.)
Watch for crashes, unusual error messages, or anomalous displayed output.
If there are any problems, start over from the beginning of the process.

<p>
Undo the <b><tt>FEATURE_DEVS</tt></b> and <b><tt>COMPILE_INITS</tt></b>
edits.

<p>
Run

<blockquote><pre>
cvs commit
</pre></blockquote>

<p>
to ensure the repository is up to date.

<h3><a name="Changelog"></a>Updating the changelog</h3>

<p>
Create a new changelog by running either (for the main HEAD branch)

<blockquote><pre>
cvs2cl.pl --utc -T --follow trunk --delta &lt;prev release tag&gt;:HEAD --xml -f doc/changelog.xml
</pre></blockquote>

or (for a non-HEAD branch)

<blockquote><pre>
cvs2cl.pl --utc -T --follow &lt;branch&gt; --delta &lt;prev release tag&gt;:&lt;branch tag&gt; --xml -f doc/changelog.xml
</pre></blockquote>
e.g.
<blockquote>
<pre>cvs2cl.pl --utc -T --follow trunk --delta gs8_00:HEAD --xml -f doc/changelog.xml</pre>
</blockquote>

<p>
This consolidates all the CVS logs since the previous release in a readable
format. You may also wish to pass a file mapping cvs user names to real names
with the <tt>-U</tt> option.

<p>
Create the html-format changes and details documents as follows:

<blockquote><pre>
cd doc
../toolbin/split_changelog.py changelog.xml Changes.htm Details.htm
cd ..
</pre></blockquote>

<p>
The xml changelog file can now be deleted. Run

<blockquote><pre>
toolbin/makehist.tcl
</pre></blockquote>

<p>
This updates <b><tt>doc/History#.htm</tt></b> from
<b><tt>doc/News.htm</tt></b> and <b><tt>doc/Changes.htm</tt></b>.

Then run

<blockquote><pre>
cvs commit
</pre></blockquote>

<p>
again to check in the Changes and history files.

<h3><a name="Making_Tarballs"></a>Making the source distribution</h3>

<p>
First, tag the versions of the files in cvs with the release version
number.

<blockquote>
<pre><tt>cvs tag gs#_##</tt></pre>
</blockquote>

If you've already tagged this release (e.g. in making an earlier
release candidate) you'll need to add the <tt>-r</tt> and <tt>-F</tt>
options after 'cvs tag' to force moving the tag to the new revisions
of changed files.

<p>
Pull a fresh copy for distribution from the cvs repository:

<blockquote><pre>
<tt>cvs -z3 -d &lt;ghostscript cvsroot&gt; export -r gs#_## -d ghostscript-#.## gs</tt>
</pre></blockquote>


<p>
Generate the text versions of the README and PUBLIC documents:

<blockquote>
<pre><tt>cd ghostscript-#.##</tt>
<tt>lynx -dump -nolist doc/Readme.htm &gt; doc/README</tt>
<tt>lynx -dump -nolist doc/Public.htm &gt; doc/PUBLIC</tt></pre>
</blockquote>

<p>
Add copies of third-party libraries. Versions of the ijs and icc 
libraries are included in Ghostscript cvs, so these are provided
by the export. Source for zlib, libjpeg, and zlib are usually provided
in the Windows and MacOS source releases, but not the unix tarballs.

<p>
Download and unpack the latest source release of 
<a href="http://jbig2dec.sourceforge.net/">jbig2dec</a>, renaming the 
directory to just <tt>jbig2dec</tt> on the top level of ghostscript 
source directory.

<p>
For the unix source distributions only, generate the configure
scripts. From the top level directory, run 

<blockquote><pre><tt>./autogen.sh</tt>
<tt>make distclean</tt>
</pre></blockquote>

This should create links to <tt>configure.ac</tt> and
<tt>Makefile.in</tt> in the top level directory and
invoke autoconf to create the <tt>configure</tt> script.

<p>
Also, run <tt>autoconf</tt> in the ijs subdir to create the configure script
for that package.

<p>
Move back to directory containing the distribution code and make the
source archives with:

<blockquote><pre>
<tt>tar cvzf ghostscript-#.##.tar.gz ghostscript-#.##/*</tt>
<tt>zcat ghostscript-#.##.tar.gz | bzip2 -c > ghostscript-#.##.tar.bz2</tt>
</pre></blockquote>

<p>
This creates the files

<blockquote><pre>
<b><tt>ghostscript-#.##.tar.gz</tt></b> (main archive)
<b><tt>ghostscript-#.##.tar.bz2</tt></b> (main archive)
</pre></blockquote>

<p>
The important issue is that the tarballs unpack into a directory
of the same name, and that the code be a pristine copy without
build or CVS housekeeping files.

<p>
It is also customary to make a <tt>gs###src.zip</tt> archive for the
convenience of windows developers. See below.

<h3><a name="Testing_on_Windows"></a>Testing on Windows</h3>

<p>
For Windows testing, you will need, in addition to the files listed
under "<a href="#Preparing_source">Preparing the source</a>" above:
<blockquote><pre>
<b><tt>toolbin/makewin.tcl</tt></b>
</pre></blockquote>

<p>
The following procedures rely on a large number of MS-DOS batch scripts that
are not discussed here: they are unlikely to be generally useful.

<p>
Mount the Windows partition on <b><tt>/c</tt></b>, and create the
<b><tt>/c/work</tt></b> directory if needed.

<p>
Make the zip archive of all files needed for a Windows build, and copy it to
the Windows partition:

<blockquote><pre>
toolbin/makewin
cp gs###.zip /c/work
</pre></blockquote>

<p>
Boot into Windows.  Unpack the archive:

<blockquote><pre>
cd \work
unzip -oq gs###.zip
gs###
</pre></blockquote>

<p>
The <b><tt>gs###.bat</tt></b> script creates some necessary directories,
sets up <b><tt>PATH</tt></b> and <b><tt>GS_LIB</tt></b> for testing, and
makes the <b><tt>gs#.##</tt></b> directory current.

<p>
Build with the Borland compiler:

<blockquote><pre>
config bcwin32
copy /y /b ..\gs\makefile
erase obj\*.*
make > bc.log
</pre></blockquote>

<p>
Smoke test the executables (both <b><tt>gswin32</tt></b> and
<b><tt>gswin32c</tt></b>), as described above for source distributions.
Then build with the Microsoft compiler:

<blockquote><pre>
config msvc32
copy /y /b ..\gs\makefile
erase obj\*.*
nmake > msvc.log
</pre></blockquote>

<p>
Smoke test these executables too.

<p>
Building with the Watcom compiler doesn't work, because the
<b><tt>wmake</tt></b> or <b><tt>wmakel</tt></b> program runs out of memory.
However, if it did work, this is how to do it:

<blockquote><pre>
config watcw32
copy /y /b ..\gs\makefile
erase obj\*.*
wmake -u > watc.log
</pre></blockquote>

<p>
Boot back into Linux.  If testing in Windows revealed problems, edit the
source files as necessary, and go back to <a
href="#Preparing_source">"Preparing the source code."</a>

<h3><a name="Windows_distribution"></a>Building the Windows distribution</h3>
<p>
Extract the sources from <b><tt>ghostscript-N.NN.tar.gz</tt></b>
then repackage in a zip file as follows:
<blockquote>
<b><tt>zip -r temp.zip gsN.NN/LICENSE gsN.NN/doc gsN.NN/examples 
  gsN.NN/icclib gsN.NN/ijs gsN.NN/jasper gsN.NN/jbig2dec gsN.NN/lib 
  gsN.NN/src gsN.NN/Resource</tt></b>
</blockquote>
Unzip converting the line endings to CRLF:
<blockquote>
<b><tt>unzip -a temp.zip<br>
del temp.zip</tt></b>
</blockquote>
Then finally zip up the sources to the distribution file:
<blockquote>
<b><tt>zip -9 -r -X gsNNNsrc.zip gsN.NN</tt></b>
</blockquote>
This method is reasonably portable, and does not convert binary
files such as
<b><tt><a href="../examples/annots.pdf">examples/annots.pdf</a></tt></b>.
<p>
Unzip <b><tt>gsNNNsrc.zip</tt></b>.  
The directory must be named <b><tt>gsN.NN</tt></b>.
<p>
Extract the AFPL fonts <b><tt>ghostscript-fonts-std-6.0.tar.gz</tt></b>
or GNU fonts <b><tt>gnu-gs-fonts-std-6.0.tar.gz</tt></b>
into a directory <b><tt>fonts</tt></b> adjacent to the 
<b><tt>gsN.NN</tt></b> directory.  
The fonts are needed in this location for building 
the distribution archive later.
<p>
You will need the command line Info-Zip zip program available from
<a href="http://www.info-zip.org/pub/infozip/">
http://www.info-zip.org/pub/infozip/</a> 
Alternatively, the command line version of WinZip 
(<b><tt>wzzip.exe</tt></b>) can be used by replacing the 
Info-Zip command line options <b><tt>-9 -r</tt></b>
with <b><tt>-ex -P</tt></b> in
<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>.
<p>
You will need WinZip Self-Extractor for building the
self extracting archive.  This is commercial software.
You may need to update the path <b><tt>WINZIPSE_XE</tt></b> in 
<b><tt><a href="../src/winint.mak">winint.mak</a></tt></b>.
<p>
Unzip the jpeg, libpng and zlib libraries, then make ghostscript
as documented in <a href="Make.htm">Make.htm</a>.
<p>
Run the command <b><tt>nmake archive</tt></b>.  This builds the distribution
archive <b><tt>gsNNNw32.exe</tt></b> and an ordinary zip file
<b><tt>gsNNNw32.zip</tt></b> in the parent directory.
If you do not have WinZip Self-Extractor, you can use
<b><tt>nmake zip</tt></b> to make <b><tt>gsNNNw32.zip</tt></b> only. 

<h3><a name="Finishing_up"></a>Finishing up</h3>

<p>
Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to SourceForge (by anonymous
FTP to <b><tt>upload.sourceforge.net</tt></b>, directory
<b><tt>/incoming</tt></b>), and then post it using the "File Release"
facility in the AFPL Ghostscript project. If this is a stable AFPL
release put it in the <b><tt>ghostscript</tt></b> module.
If this is a GPL release, put it in the <b><tt>gs-gpl</tt></b> module.
If this is a test release or beta release, put
it in the <b><tt>gs-devel</tt></b> or <b><tt>gs-beta</tt></b> module,
respectively. 
If you are adding executable builds or source archives for other
platforms to an existing source release, please use the same release
date as the source release, not the current date.

<p>
If <b><tt>doc/C-style.htm</tt></b> has changed, put it on
<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/C-style.htm</tt></b>.

<h3><a name="Beta_distributions"></a>Beta distributions</h3>

<p>
Do the steps for distributions in general.

<p>
Upload <b><tt>ghostscript-#.##.tar.*</tt></b> to
<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/test</tt></b>.

<p>
Send an email announcement to the <tt>gs-test</tt> list
announcing the new release.

<h3><a name="Public_releases"></a>Public releases</h3>

<p>
Do the steps for distributions in general.

<p>
Create a directory at
<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/gs###/</tt></b>.  In that
directory, store the following files:

<ul>

<li>Standard distribution files:

<blockquote><pre>
<b><tt>ghostscript-#.##.tar.gz</tt></b>
<b><tt>ghostscript-#.##.tar.bz2</tt></b>
</pre></blockquote>

<li>MS Windows source and executables:

<blockquote><pre>
<b><tt>gs###src.zip</tt></b>
<b><tt>gs###w32.exe</tt></b>
<b><tt>gs###w32.zip</tt></b>
</pre></blockquote>

<li>Third-party libraries, as links (upload these if not installed), where
<b><tt>$$$</tt></b> et al. refer to the version number of the library, which
should be the latest compatible release of the library and should be 
consistent with the values of and version numbers specifically listed in
the makefiles.

<blockquote><pre>
<b><tt>jpegsrc.v$$.tar.gz</tt></b> -> <b><tt>../../3rdparty/jpegsrc.v$$.tar.gz</tt></b>
<b><tt>libpng-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/libpng-$.$.$.tar.gz</tt></b>
<b><tt>zlib-$.$.$.tar.gz</tt></b> -> <b><tt>../../3rdparty/zlib-$.$.$.tar.gz</tt></b>
<b><tt>jpegsr$$.zip</tt></b> -> <b><tt>../../3rdparty/jpegsr$$.zip</tt></b>
<b><tt>lpng$$$.zip</tt></b> -> <b><tt>../../3rdparty/lpng$$$.zip</tt></b>
<b><tt>zlib$$$.zip</tt></b> -> <b><tt>../../3rdparty/zlib$$$.zip</tt></b>
</pre></blockquote>

In any case, the names of the links in the distribution directory should reflect
the original name of the upstream file.

<li>Fonts, where <b><tt>$.$$</tt></b> refers to the most recent version
number of the fonts:

<blockquote><pre>
<b><tt>ghostscript-fonts-other-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-other-$.$.tar.gz</tt></b>
<b><tt>ghostscript-fonts-std-$.$.tar.gz</tt></b> -> <b><tt>../fonts/ghostscript-fonts-std-$.$.tar.gz</tt></b>
</pre></blockquote>

</ul>

<p>
(Note that the link names are somewhat inconsistent: some of them retain the
version number of the file being referenced, and some of them use the
Ghostscript release number.  This is a historical artifact that might be
changed someday.)

<p>
E-mail the release announcement using:
<blockquote><pre>
To: gs-announce
</pre></blockquote>

<p>
Edit the Web pages in cvs and commit to reflect the new release.
The Wisconsin server should update automatically.

<h2><a name="After_releasing"></a>After releasing</h2>

<p>
Update the release number by incrementing it as described in <a
href="#Release_numbering">Release numbering</a> above.

<p>
In <b><tt>gscdef.c</tt></b>, edit the definition of
<b><tt>GS_PRODUCT</tt></b> to include "CVS PRE-RELEASE".

<p>
Edit <b><tt>doc/News.htm</tt></b> to remove all the content.


<h2><a name="GPL_releases"></a>GPL Ghostscript releases</h2>

<p>
artofcode LLC re-releases each stable AFPL Ghostscript branch as
GPL Ghostscript (under the GNU GPL license) when the next major stable
AFPL release comes out, or after one calendar year, whichever comes first.

<h3><a name="GPL_code"></a>GPL code</h3>

<p>
To make a GPL Ghostscript release from AFPL Ghostscript, update the
LICENCE file to reflect the new status of the code. In general there
can be no recipe for this as it depends on the niceties of ownership and
permisison attached to each piece of code. However, a previous GPL
release can serve as a guide.

<p>
There are also generally some portions of code (usually drivers) which
are limited to GPL Ghostscript only. These may want porting to the new
version before release.

<p>Once the license change is complete and the codebase has been
updated to satifaction, follow the release process as described for AFPL
Ghostscript above to test and package the new version. The distribution
methods are parallel to those for the AFPL, with the GPL releases
generally going under a separate header. For example, on the wisc
ftp site upload the file to 
<tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gpl/gs###/</tt>.


<h2><a name="Fonts"></a>Fonts</h2>

<p>
artofcode LLC distributes a package of the base 35 PostScript fonts, and a
package of other miscellaneous fonts.  As with the Ghostscript code, each
package is released both with the AFPL and with the GPL; however, unlike the
Ghostscript code, artofcode releases these versions simultaneously rather
than with a one-version delay.

<p>
To make the font packages, run the command

<blockquote><pre>
toolbin/makefonts #.##
</pre></blockquote>

<p>
This creates the following files:

<blockquote><pre>
ghostscript-fonts-std-#.##.tar.gz
ghostscript-fonts-other-#.##.tar.gz
gnu-gs-fonts-std-#.##.tar.gz
gnu-gs-fonts-other-#.##.tar.gz
</pre></blockquote>

<p>
The first two of these use the AFPL, and should be uploaded to
<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/fonts/</tt></b>.  The other two
use the GPL, and should be uploaded to
<b><tt>ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/gnu/fonts/</tt></b>.  For the GPL
release, also see <a href="#GPL_after_releasing">"After releasing
(GNU)"</a>.

<!-- [2.0 end contents] ==================================================== -->

<!-- [3.0 begin visible trailer] =========================================== -->
<hr>

<p>
<small>Copyright &copy; 1999-2003 artofcode LLC. All rights 
reserved.</small>

<p>
This software is provided AS-IS with no warranty, either express or
implied.

This software is distributed under license and may not be copied,
modified or distributed except as expressly authorized under the terms
of the license contained in the file LICENSE in this distribution.

For more information about licensing, please refer to
http://www.ghostscript.com/licensing/. For information on
commercial licensing, go to http://www.artifex.com/licensing/ or
contact Artifex Software, Inc., 101 Lucas Valley Road #110,
San Rafael, CA  94903, U.S.A., +1(415)492-9861.

<p>
<small>Ghostscript version 8.53, 20 October 2005

<!-- [3.0 end visible trailer] ============================================= -->

</body>
</html>
